import test_exception_module

def use_exception1():
    try:
        num = int(input('请输入一个整数'))
        print(num)

    except:
        print('输入的必须是整型的数字')


def use_exception2():
    """
    掌握不同的异常类型，可以跳转到不同的分支
    :return:
    """
    try:
        num = int(input('请输入整数:'))
        result = 8 / num
        print(result)
    except ValueError:
        print("请输入正确的整数")
    except ZeroDivisionError:
        print("除零错误")

def use_exception3():
    """
    掌握不同的异常类型，可以跳转到不同的分支
    :return:
    """
    try:
        num = int(input('请输入整数:'))
        result = 8 / num
        print(result)
    except ValueError:
        print("请输入正确的整数")
    except Exception as e:  # e表示异常对象别名
        print(e)

def use_exception4():
    try:
        num = int(input('请输入整数:'))
        result = 8 / num
        print(result)
    except ValueError:
        print("请输入正确的整数")
        return
    except ZeroDivisionError:
        print("除零错误")
    except Exception as result:
        print("未知错误 %s" % result)
    else:  # 比较鸡肋会受return的影响
        print("正常执行")
    finally:  # finally不受return的影响
        print("执行完成，但是不保证正确")

def use_exception5():
    """
    如何捕获异常发生的文件（模块）和具体行数
    :return:
    """
    try:
        test_exception_module.test()
    except Exception as e:
        print(e)
        print(e.__traceback__.tb_frame.f_globals["__file__"])  # 发生异常所在文件
        print(e.__traceback__.tb_lineno)  # 发生异常所在行数


if __name__ == '__main__':
    # use_exception1()
    # use_exception2()
    # use_exception3()
    # use_exception4()
    use_exception5()
